<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en" xml:lang="en" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Roadmap: How to adopt the Continuous Integration practice</title>
<meta name="uma.type" content="Roadmap">
<meta name="uma.name" content="how_to_adopt_continuous_integration">
<meta name="uma.presentationName" content="How to adopt the Continuous Integration practice">
<meta name="element_type" content="other">
<meta name="filetype" content="description">
<meta name="role" content="">
<link rel="StyleSheet" href="./../../../css/default.css" type="text/css">
<script src="./../../../scripts/ContentPageResource.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/ContentPageSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/ContentPageSubSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/ContentPageToolbar.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/contentPage.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
					var backPath = './../../../';
					var imgPath = './../../../images/';
					var nodeInfo=null;
					contentPage.preload(imgPath, backPath, nodeInfo,  '', false, false, false);
				</script>
</head>
<body>
<div id="breadcrumbs"></div>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td valign="top"><a name="Top"></a>
<div id="page-guid" value="_4qbzQPnTEdyLA5PXdgVJXw"></div>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="pageTitle" nowrap="true">Roadmap: How to adopt the Continuous Integration practice</td><td width="100%">
<div align="right" id="contentPageToolbar"></div>
</td><td width="100%" class="expandCollapseLink" align="right"><a name="mainIndex" href="./../../../index.htm"></a><script language="JavaScript" type="text/javascript" src="./../../../scripts/treebrowser.js"></script></td>
</tr>
</table>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="pageTitleSeparator"><img src="./../../../images/shim.gif" alt="" title="" height="1"></td>
</tr>
</table>
<div class="overview">
<table width="97%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50"><img src="./../../../images/roadmap.gif" alt="" title=""></td><td>
<table class="overviewTable" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">This roadmap describes how to adopt the Continuous Integration practice.</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Main Description</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td class="sectionTableSingleCell"><h3> Getting started </h3>
<p> The ultimate goal of continuous integration (CI) is to integrate and test 
  the system on every change to minimize the time between injecting a defect and 
  correcting it. If the team is new to continuous integration, though, it is best 
  to start small and then incrementally add subpractices, as identified in the 
  subsection that follows. For example, start with a simple daily integration 
  build and incrementally add tests and automated inspections (code coverage, 
  and so forth) to the build process, over time. As the team begins to adopt the 
  sub-practices increase the build frequency. The following subpractices provide 
  guidance in adopting CI. </p>
<h4> Developer practices </h4>
<ul>
  <li><b> Make changes available frequently.</b> For CI to be effective, <a class="elementLink" href="./../../../core.mgmt.common.extend_supp/guidances/concepts/change_set_430BF233.html" guid="_1QU9MAIoEdyLh7vsrHZ4YA">Change Set</a>s need to be small, complete, cohesive, and <em>available</em> for 
    integration. Keep change sets small so that they can be completed and tested 
    in a relatively short time span.</li>
</ul>
<ul>
  <li><b> Don't break the build. </b>Test your changes by using a private build 
    before making your changes available. </li>
</ul>
<ul>
  <li><b>Fix broken builds immediately. </b>When a problem is identified, fix 
    it as soon as possible, while it is still fresh in your mind. If the problem 
    cannot be quickly resolved, back out (do not complete) the changes. </li>
</ul>
<h4> Integration practices </h4>
<p> A build is more than a compile (compilation). A build consists of compilation, 
  testing, inspection, and deployment. </p>
<ul>
  <li> <b>Provide feedback </b>as quickly as possible. </li>
</ul>
<ul>
  <li><b>Automate the build process</b> so that it is fast and repeatable and 
    so that issues are identified and conveyed to the appropriate person for resolution 
    as quickly as possible. </li>
</ul>
<h4>
    Automation
</h4>
<ul>
  <li> Commit your test scripts to the CM repository so they are controlled and 
    available to the rest of the team. Automated testing is highly recommended, 
    both for developer tests and integration tests. Tests need to be repeatable 
    and fast. </li>
</ul>
<ul>
  <li> Commit your build scripts to the CM repository so they are controlled and 
    available to the rest of the team. Automated builds are highly recommended, 
    both for private builds and integration builds. Builds need to be repeatable 
    and fast. </li>
</ul>
<ul>
  <li> Invest in a CI server.The goal of continuous integration is to integrate, 
    build, and test the software in a clean environment any time that there is 
    a change to the implementation. Although a dedicated CI server is not essential, 
    it will greatly reduce the overhead required to integrate continuously and 
    provide the required reporting. </li>
</ul>
<h3> Common pitfalls </h3>
<ul>
  <li> <b>A build process that doesn't identify problems.</b> A build is more 
    that a simple compilation (or its dynamic language variations). Sound testing 
    and inspection practices, both developer testing and integration testing, 
    must be adopted also to ensure the right amount of coverage. </li>
</ul>
<ul>
  <li> <b>Integration builds that take too long to complete. </b>The build process 
    must balance coverage with speed. You don't have to run every system level 
    acceptance test to meet the intent of CI. Staged builds will provide a useful 
    means to organize testing to get the balance coverage and speed. </li>
</ul>
<ul>
  <li> <b>Change sets that are too large.</b> Developers must develop the discipline 
    and skills to organize their work into small, cohesive change sets. This will 
    simplify testing, debugging, and reporting. It will also ensure that changes 
    are made available frequently enough to meet the intention of continuous integration. 
  </li>
</ul>

<ul>
  <li> <b>Failure to commit defects to the CM repository. </b>Ensure adequate 
    testing by developers before making change sets available. </li>
</ul></td>
</tr>
</table>
</div>
<div class="sectionHeading">More Information</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<th class="sectionTableHeading" scope="row">Concepts</th><td class="sectionTableCell">
<ul>
<li>
<a href="./../../../core.mgmt.common.extend_supp/guidances/concepts/change_set_430BF233.html" guid="_1QU9MAIoEdyLh7vsrHZ4YA">Change Set</a>
</li>
</ul>
</td>
</tr>
</table>
</div>
<table class="copyright" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="copyright"><p> This program and the accompanying materials are made available under the<br />
  <a href="http://www.eclipse.org/org/documents/epl-v10.php" target="_blank">Eclipse 
  Public License V1.0</a>, which accompanies this distribution. </p><p/><p> <a class="elementLink" href="./../../../core.default.release_copyright.base/guidances/supportingmaterials/openup_copyright_C3031062.html" guid="_UaGfECcTEduSX6N2jUafGA">OpenUP Copyright</a></p></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
<script type="text/javascript" language="JavaScript">
				contentPage.onload();
			</script>
</html>
